package si.banst.sledi.storitve;

import java.util.List;
import java.util.concurrent.Future;
import java.util.logging.Logger;

import javax.ejb.EJB;
import javax.jws.WebMethod;
import javax.jws.WebService;

import si.banst.sledi.Pogoj;
import si.banst.sledi.ZapisSledi;
import si.banst.sledi.ejb.SlediBeanLocal;
import si.banst.sledi.ejb.napake.NapakaPriPovprasevanju;
import si.banst.sledi.ejb.napake.NapakaPriZapisu;

@WebService(serviceName = "SlediStoritev", targetNamespace = "http://sledi.banst.si/storitve/")
public class SlediStoritev {

	private static final Logger logger = Logger.getLogger(SlediStoritev.class
			.getName());

	@EJB
	private SlediBeanLocal slediBean;

	public SlediStoritev() {
		super();
	}

	@WebMethod(operationName = "VstaviSled")
	public void vstaviSled(ZapisSledi zapisSledi) throws NapakaPriZapisu {
		slediBean.vstaviSled(zapisSledi);
	}

	@WebMethod(operationName = "VstaviSledi")
	public void vstaviSledi(List<ZapisSledi> zapisiSledi)
			throws NapakaPriZapisu {
		slediBean.vstaviSledi(zapisiSledi);
	}

	@WebMethod(operationName = "VrniSledi")
	public List<String> vrniSledi(List<Pogoj> pogoji, String vrstaZbirke)
			throws NapakaPriPovprasevanju {
		Future<List<String>> result = slediBean.vrniSledi(pogoji, vrstaZbirke);
		while (!result.isDone()) {
			Thread.yield();
		}
		try {
			return (List<String>) result.get();
		} catch (Exception e) {
			logger.severe("Napaka pri klicu operacije vrniSledi. "
					+ e.getMessage());
			throw new NapakaPriPovprasevanju("Napaka pri klicu storitve. ", e);
		}
	}

}
